#ifndef _LIST_H_
#define _LIST_H_


/*****************************************************************************
 *
 *  List Data Structure
 *
 ****************************************************************************/

typedef struct _list_entry{
	struct _list_entry *next, *prev;
}LIST_ENTRY, *PLIST_ENTRY;

/*****************************************************************************
 *
 *  List Functions
 *
 ****************************************************************************/

#define CONTAINED_OF( _x_, _s_, _m_ )  (_s_ *)( ((unsigned char*)_x_) - (int)&(((_s_ *)0)->_m_) )

void        InitListHead( PLIST_ENTRY list_head);
void        InsertListTail( PLIST_ENTRY list_head, PLIST_ENTRY list_entry );
void        RemoveListEntry( PLIST_ENTRY list_entry );
PLIST_ENTRY RemoveListHead( PLIST_ENTRY list_head );
BOOL        ListIsEmpty( PLIST_ENTRY list_head );

#endif // _LIST_H_
